package it.unisa.unibox.commons;

import it.unisa.unibox.beans.AreaScientifica;
import it.unisa.unibox.beans.Dipartimento;
import it.unisa.unibox.beans.Notifica;
import it.unisa.unibox.beans.Prodotto;
import it.unisa.unibox.beans.Ricercatore;

import java.util.ArrayList;

import org.jdom.Document;
import org.jdom.Element;

public class XMLParser {


	public static Document ricercaProdotti(ArrayList<Prodotto> lista) {

		Element xml_root = new Element("response");
		Element xml_prodotto;
		Element xml_id;
		Element xml_responsabile;
		Element xml_tipologia;
		Element xml_titolo;
		Element xml_abstract;
		Element xml_stato;
		Element xml_pubblico;
		Element xml_anno;
		Element xml_lingua;
		Element xml_url;
		Element xml_note;
		Element xml_dipartimento;
		Element xml_areaScientifica;


		for(Prodotto p: lista){

			xml_prodotto = new Element("prodotto");

			xml_id = new Element("id");
			xml_responsabile = new Element("responsabile");
			xml_tipologia = new Element("tipologia");
			xml_titolo = new Element("titolo");
			xml_abstract = new Element("abstract");
			xml_stato = new Element("stato");
			xml_pubblico = new Element("pubblico");
			xml_anno = new Element("anno");
			xml_lingua = new Element("lingua");
			xml_url = new Element("url");
			xml_note = new Element("note");
			xml_dipartimento = new Element("dipartimento");
			xml_areaScientifica = new Element("areaScientifica");


			xml_id.setText(""+p.getId());
			xml_responsabile.setText(p.getResponsabile().getNome()+" "+ p.getResponsabile().getCognome());
			xml_tipologia.setText(p.getTipologia());
			xml_titolo.setText(p.getTitolo());
			xml_abstract.setText(p.getAbstract_field());
			xml_stato.setText(""+p.getStato());
			xml_pubblico.setText(""+p.getPubblico());
			xml_anno.setText(""+p.getAnno());
			xml_lingua.setText(p.getLingua());
			xml_url.setText(p.getUrl());
			xml_note.setText(p.getNote());
			xml_dipartimento.setText(p.getResponsabile().getDipartimento().getNome());
			xml_areaScientifica.setText(p.getResponsabile().getAreaScientifica().getNome());


			xml_prodotto.addContent(xml_id);
			xml_prodotto.addContent(xml_responsabile);
			xml_prodotto.addContent(xml_tipologia);
			xml_prodotto.addContent(xml_titolo);
			xml_prodotto.addContent(xml_abstract);
			xml_prodotto.addContent(xml_stato);
			xml_prodotto.addContent(xml_pubblico);
			xml_prodotto.addContent(xml_anno);
			xml_prodotto.addContent(xml_lingua);
			xml_prodotto.addContent(xml_url);
			xml_prodotto.addContent(xml_note);
			xml_prodotto.addContent(xml_dipartimento);
			xml_prodotto.addContent(xml_areaScientifica);


			xml_root.addContent(xml_prodotto);

		}

		Document doc = new Document(xml_root);
		return doc;

	} 


	public static Document ricercaDipartimenti(ArrayList<Dipartimento> lista) {

		Element xml_root = new Element("response");
		Element xml_dipartimento;
		Element xml_id;
		Element xml_nome;

		for(Dipartimento d: lista){

			xml_dipartimento = new Element("dipartimento");

			xml_id = new Element("id");
			xml_nome = new Element("nome");

			xml_id.setText(""+d.getId());
			xml_nome.setText(d.getNome());

			xml_dipartimento.addContent(xml_id);
			xml_dipartimento.addContent(xml_nome);

			xml_root.addContent(xml_dipartimento);

		}

		Document doc = new Document(xml_root);
		return doc;

	} 


	public static Document ricercaAreeScientifiche(ArrayList<AreaScientifica> lista) {

		Element xml_root = new Element("response");
		Element xml_areaScientifica;
		Element xml_id;
		Element xml_nome;
		Element xml_codice;

		for(AreaScientifica a: lista){

			xml_areaScientifica = new Element("areaScientifica");

			xml_id = new Element("id");
			xml_nome = new Element("nome");
			xml_codice = new Element("codice");

			xml_id.setText(""+a.getId());
			xml_nome.setText(a.getNome());
			xml_codice.setText(""+a.getCodice());

			xml_areaScientifica.addContent(xml_id);
			xml_areaScientifica.addContent(xml_nome);
			xml_areaScientifica.addContent(xml_codice);

			xml_root.addContent(xml_areaScientifica);

		}

		Document doc = new Document(xml_root);
		return doc;

	}


	public static Document getProdottiHome(ArrayList<Prodotto> lista) {

		Element xml_root = new Element("response");
		Element xml_prodotto;
		Element xml_id;
		Element xml_responsabile;
		Element xml_tipologia;
		Element xml_titolo;
		Element xml_stato;
		Element xml_anno;

		for(Prodotto p: lista){

			xml_prodotto = new Element("prodotto");

			xml_id = new Element("id");
			xml_responsabile = new Element("responsabile");
			xml_tipologia = new Element("tipologia");
			xml_titolo = new Element("titolo");
			xml_stato = new Element("stato");
			xml_anno = new Element("anno");

			xml_id.setText(""+p.getId());
			xml_titolo.setText(p.getTitolo());
			xml_tipologia.setText(p.getTipologia());
			xml_anno.setText(""+p.getAnno());
			xml_responsabile.setText(p.getResponsabile().getNome()+" "+ p.getResponsabile().getCognome());
			xml_stato.setText(""+p.getStato());

			xml_prodotto.addContent(xml_id);
			xml_prodotto.addContent(xml_responsabile);
			xml_prodotto.addContent(xml_tipologia);
			xml_prodotto.addContent(xml_titolo);
			xml_prodotto.addContent(xml_stato);
			xml_prodotto.addContent(xml_anno);

			xml_root.addContent(xml_prodotto);

		}

		Document doc = new Document(xml_root);
		return doc;

	}


	public static Document autocompletamentoAutori(ArrayList<Ricercatore> lista) {

		Element xml_root = new Element("response");

		Element xml_ricercatore;
		Element xml_id;
		Element xml_nome;
		Element xml_cognome;
		Element xml_dipartimento;

		for(Ricercatore r: lista){

			xml_ricercatore = new Element("ricercatore");

			xml_id = new Element("id");
			xml_nome = new Element("nome");
			xml_cognome = new Element("cognome");
			xml_dipartimento = new Element("dipartimento");

			xml_id.setText(""+r.getId());
			xml_nome.setText(r.getNome());
			xml_cognome.setText(r.getCognome());
			xml_dipartimento.setText(""+r.getDipartimento().getNome());		

			xml_ricercatore.addContent(xml_id);
			xml_ricercatore.addContent(xml_nome);
			xml_ricercatore.addContent(xml_cognome);
			xml_ricercatore.addContent(xml_dipartimento);	

			xml_root.addContent(xml_ricercatore);

		}

		Document doc = new Document(xml_root);
		return doc;

	} 

	public static Document leggiNotifiche(ArrayList<Notifica> lista) {

		Element xml_root = new Element("response");

		Element xml_notifica;
		Element xml_mittente;
		Element xml_nome;
		Element xml_cognome;
		Element xml_prodotto;
		Element xml_id;
		Element xml_tipologia;
		Element xml_titolo;
		Element xml_data;


		for(Notifica n: lista){

			xml_notifica = new Element("notifica");

			xml_mittente = new Element("mittente");
			xml_nome = new Element("nome");
			xml_cognome = new Element("cognome");

			xml_prodotto= new Element("prodotto");
			xml_id= new Element("id");
			xml_tipologia = new Element("tipologia");
			xml_titolo = new Element("titolo");

			xml_data = new Element("data");

			xml_nome.setText(""+n.getMittente().getNome());
			xml_cognome.setText(""+n.getMittente().getCognome());

			xml_id.setText(""+n.getidProdotto().getId());
			xml_tipologia.setText(""+n.getidProdotto().getTipologia());
			xml_titolo.setText(""+n.getidProdotto().getTitolo());

			xml_data.setText(""+n.getData());


			xml_mittente.addContent(xml_nome);
			xml_mittente.addContent(xml_cognome);

			xml_prodotto.addContent(xml_id);
			xml_prodotto.addContent(xml_tipologia);	
			xml_prodotto.addContent(xml_titolo);	

			xml_notifica.addContent(xml_mittente);
			xml_notifica.addContent(xml_prodotto);
			xml_notifica.addContent(xml_data);

			xml_root.addContent(xml_notifica);

		}

		Document doc = new Document(xml_root);
		return doc;
	}


	public static Document visualizzaProdottiCompleti(ArrayList<Prodotto> lista) {

		Element xml_root = new Element("response");

		Element xml_prodotto;
		Element xml_id;
		Element xml_responsabile;
		Element xml_tipologia;
		Element xml_titolo;
		Element xml_stato;
		Element xml_anno;
		Element xml_dipartimento;
		Element xml_areaScientifica;



		/*		Element xml_abstract;
		Element xml_pubblico;
		Element xml_lingua;
		Element xml_url;
		Element xml_note;
		 */
		for(Prodotto p: lista){

			xml_prodotto = new Element("prodotto");

			xml_id = new Element("id");
			xml_responsabile = new Element("responsabile");
			xml_tipologia = new Element("tipologia");
			xml_titolo = new Element("titolo");
			xml_stato = new Element("stato");
			xml_anno = new Element("anno");
			xml_dipartimento = new Element("dipartimento");
			xml_areaScientifica = new Element("areaScientifica");


			/*
				xml_abstract = new Element("abstract");
				xml_pubblico = new Element("pubblico");
				xml_lingua = new Element("lingua");
				xml_url = new Element("url");
				xml_note = new Element("note");
			 */
			xml_id.setText(""+p.getId());
			xml_responsabile.setText(p.getResponsabile().getNome()+" "+ p.getResponsabile().getCognome());
			xml_tipologia.setText(p.getTipologia());
			xml_titolo.setText(p.getTitolo());
			xml_stato.setText(""+p.getStato());
			xml_anno.setText(""+p.getAnno());
			xml_dipartimento.setText(p.getResponsabile().getDipartimento().getNome());
			xml_areaScientifica.setText(p.getResponsabile().getAreaScientifica().getNome());


			/*
				xml_abstract.setText(p.getAbstract_field());
				xml_pubblico.setText(""+p.getPubblico());
				xml_lingua.setText(p.getLingua());
				xml_url.setText(p.getUrl());
				xml_note.setText(p.getNote());
			 */
			xml_prodotto.addContent(xml_id);
			xml_prodotto.addContent(xml_responsabile);
			xml_prodotto.addContent(xml_tipologia);
			xml_prodotto.addContent(xml_titolo);
			xml_prodotto.addContent(xml_stato);
			xml_prodotto.addContent(xml_anno);
			xml_prodotto.addContent(xml_dipartimento);
			xml_prodotto.addContent(xml_areaScientifica);

			/*
				xml_prodotto.addContent(xml_abstract);
				xml_prodotto.addContent(xml_pubblico);
				xml_prodotto.addContent(xml_lingua);
				xml_prodotto.addContent(xml_url);
				xml_prodotto.addContent(xml_note);
			 */
			xml_root.addContent(xml_prodotto);
		}

		Document doc = new Document(xml_root);
		return doc;
	}


	public static Document visualizzaProdottiAccettati(ArrayList<Prodotto> lista) {

		Element xml_root = new Element("response");

		Element xml_prodotto;
		Element xml_id;
		Element xml_responsabile;
		Element xml_tipologia;
		Element xml_titolo;
		Element xml_stato;
		Element xml_anno;
		Element xml_dipartimento;
		Element xml_areaScientifica;



		/*		Element xml_abstract;
		Element xml_pubblico;
		Element xml_lingua;
		Element xml_url;
		Element xml_note;
		 */
		for(Prodotto p: lista){

				xml_prodotto = new Element("prodotto");

				xml_id = new Element("id");
				xml_responsabile = new Element("responsabile");
				xml_tipologia = new Element("tipologia");
				xml_titolo = new Element("titolo");
				xml_stato = new Element("stato");
				xml_anno = new Element("anno");
				xml_dipartimento = new Element("dipartimento");
				xml_areaScientifica = new Element("areaScientifica");


				/*
				xml_abstract = new Element("abstract");
				xml_pubblico = new Element("pubblico");
				xml_lingua = new Element("lingua");
				xml_url = new Element("url");
				xml_note = new Element("note");
				 */
				xml_id.setText(""+p.getId());
				xml_responsabile.setText(p.getResponsabile().getNome()+" "+ p.getResponsabile().getCognome());
				xml_tipologia.setText(p.getTipologia());
				xml_titolo.setText(p.getTitolo());
				xml_stato.setText(""+p.getStato());
				xml_anno.setText(""+p.getAnno());
				xml_dipartimento.setText(p.getResponsabile().getDipartimento().getNome());
				xml_areaScientifica.setText(p.getResponsabile().getAreaScientifica().getNome());


				/*
				xml_abstract.setText(p.getAbstract_field());
				xml_pubblico.setText(""+p.getPubblico());
				xml_lingua.setText(p.getLingua());
				xml_url.setText(p.getUrl());
				xml_note.setText(p.getNote());
				 */
				xml_prodotto.addContent(xml_id);
				xml_prodotto.addContent(xml_responsabile);
				xml_prodotto.addContent(xml_tipologia);
				xml_prodotto.addContent(xml_titolo);
				xml_prodotto.addContent(xml_stato);
				xml_prodotto.addContent(xml_anno);
				xml_prodotto.addContent(xml_dipartimento);
				xml_prodotto.addContent(xml_areaScientifica);

				/*
				xml_prodotto.addContent(xml_abstract);
				xml_prodotto.addContent(xml_pubblico);
				xml_prodotto.addContent(xml_lingua);
				xml_prodotto.addContent(xml_url);
				xml_prodotto.addContent(xml_note);
				 */
				xml_root.addContent(xml_prodotto);
		}

		Document doc = new Document(xml_root);
		return doc;
	}


	public static Document errore() {

		Element xml_root = new Element("response");

		Element xml_message;

		xml_message = new Element("message");
		xml_message.setText("errore");
		xml_root.addContent(xml_message);

		Document doc = new Document(xml_root);
		return doc;



	}
	
	
	public static Document rispostaInserimento(int id, int stato){
		
		Element xml_root = new Element("response");
		
		Element xml_stato = new Element("stato");
		Element xml_id = new Element("id");
		
		xml_stato.setText(""+stato);
		xml_id.setText(""+id);
	
		xml_root.addContent(xml_stato);
		xml_root.addContent(xml_id);
				
		Document doc = new Document(xml_root);
		return doc;
	}


}
